// 自执行 函数 解决模块化问题

let fs = require('fs')
let path =  require('path')
let str = fs.readFileSync(path.resolve(__dirname, 'test/sum.js'), 'utf8')
console.log(require('./test/sum'))
console.log(str)
// 让一个字符串执行   
// new Function   
// eval这个问题是 作用域问题 执行环境不干净
let a = 'var a= 1; retun a;'
let fn = new Function('x', 'y', a) // 最后一个是函数字符串前面的是形参   返回一个函数  
// node 里面用的 也不是这个   因为写的时候  return 1; 单单这种很奇怪


// node 用的是 vm 实现模块化
let vm = require('vm')  // 沙箱
let name = 'ax'
vm.runInThisContext('console.log(name)')  // undefined  没有作用域问题


// 